{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "outputs": [],
   "source": [
    "# _*_ coding: utf-8 _*_\n",
    "# @Time : 2020/10/18 17:38\n",
    "# @Author : dlfan\n",
    "# @Version：V 1.0\n",
    "# @File : FeaturesAugmentation.py\n",
    "# @desc : augment features for Rrs\n",
    "#         two type: 1、band ratio\n",
    "#                   2、band difference\n",
    "\n",
    "%matplotlib inline\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import sys\n",
    "import os\n",
    "# change work dir\n",
    "os.chdir(r'E:\\02Projects\\papers\\chlmodel\\data\\seawifs\\00 images')\n",
    "torch.set_default_tensor_type(torch.FloatTensor)\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.ensemble import RandomForestRegressor\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "outputs": [],
   "source": [
    "dt = pd.read_csv(r'E:\\02Projects\\papers\\chlmodel\\data\\seawifs\\02 filter\\train_dataset-refined.csv')\n",
    "dt.head(10)\n",
    "\n",
    "dt[dt < 0] = 0"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "outputs": [
    {
     "name": "stdout",
     "text": [
      "['rrs412', 'rrs443', 'rrs490', 'rrs510', 'rrs555', 'rrs670']\n"
     ],
     "output_type": "stream"
    },
    {
     "data": {
      "text/plain": "        id    rrs412    rrs443    rrs490    rrs510    rrs555    rrs670  \\\n0        0  0.012821  0.009856  0.006470  0.003669  0.001615  0.000176   \n1        1  0.010425  0.008598  0.006058  0.003653  0.001748  0.000051   \n2        2  0.014933  0.011885  0.007426  0.004519  0.001869  0.000392   \n3        3  0.014598  0.011517  0.007341  0.004205  0.002077  0.000308   \n4        4  0.014281  0.011432  0.006815  0.003481  0.001421  0.000126   \n...    ...       ...       ...       ...       ...       ...       ...   \n2216  2216  0.000000  0.000000  0.000782  0.001187  0.002979  0.000848   \n2217  2217  0.003842  0.003566  0.003204  0.003489  0.005542  0.002453   \n2218  2218  0.004306  0.004060  0.003854  0.004282  0.005715  0.003042   \n2219  2219  0.001798  0.002077  0.002604  0.003242  0.005303  0.003317   \n2220  2220  0.000000  0.000423  0.001642  0.002282  0.004931  0.001849   \n\n      seawifs_chlor_a  in_situ_chl  rrs412/rrs443  ...  rrs555/rrs412  \\\n0            0.071571     0.030000            NaN  ...            NaN   \n1            0.102069     0.027000            NaN  ...            NaN   \n2            0.051974     0.037000            NaN  ...            NaN   \n3            0.056256     0.030000            NaN  ...            NaN   \n4            0.045177     0.033000            NaN  ...            NaN   \n...               ...          ...            ...  ...            ...   \n2216        86.371340    41.652000            NaN  ...            NaN   \n2217        11.006004    90.334999            NaN  ...            NaN   \n2218         5.618242    61.255329            NaN  ...            NaN   \n2219        12.134423   138.046997            NaN  ...            NaN   \n2220        49.089612    43.099998            NaN  ...            NaN   \n\n      rrs555/rrs443  rrs555/rrs490  rrs555/rrs510  rrs555/rrs670  \\\n0               NaN            NaN            NaN            NaN   \n1               NaN            NaN            NaN            NaN   \n2               NaN            NaN            NaN            NaN   \n3               NaN            NaN            NaN            NaN   \n4               NaN            NaN            NaN            NaN   \n...             ...            ...            ...            ...   \n2216            NaN            NaN            NaN            NaN   \n2217            NaN            NaN            NaN            NaN   \n2218            NaN            NaN            NaN            NaN   \n2219            NaN            NaN            NaN            NaN   \n2220            NaN            NaN            NaN            NaN   \n\n      rrs670/rrs412  rrs670/rrs443  rrs670/rrs490  rrs670/rrs510  \\\n0               NaN            NaN            NaN            NaN   \n1               NaN            NaN            NaN            NaN   \n2               NaN            NaN            NaN            NaN   \n3               NaN            NaN            NaN            NaN   \n4               NaN            NaN            NaN            NaN   \n...             ...            ...            ...            ...   \n2216            NaN            NaN            NaN            NaN   \n2217            NaN            NaN            NaN            NaN   \n2218            NaN            NaN            NaN            NaN   \n2219            NaN            NaN            NaN            NaN   \n2220            NaN            NaN            NaN            NaN   \n\n      rrs670/rrs555  \n0               NaN  \n1               NaN  \n2               NaN  \n3               NaN  \n4               NaN  \n...             ...  \n2216            NaN  \n2217            NaN  \n2218            NaN  \n2219            NaN  \n2220            NaN  \n\n[2221 rows x 39 columns]",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>id</th>\n      <th>rrs412</th>\n      <th>rrs443</th>\n      <th>rrs490</th>\n      <th>rrs510</th>\n      <th>rrs555</th>\n      <th>rrs670</th>\n      <th>seawifs_chlor_a</th>\n      <th>in_situ_chl</th>\n      <th>rrs412/rrs443</th>\n      <th>...</th>\n      <th>rrs555/rrs412</th>\n      <th>rrs555/rrs443</th>\n      <th>rrs555/rrs490</th>\n      <th>rrs555/rrs510</th>\n      <th>rrs555/rrs670</th>\n      <th>rrs670/rrs412</th>\n      <th>rrs670/rrs443</th>\n      <th>rrs670/rrs490</th>\n      <th>rrs670/rrs510</th>\n      <th>rrs670/rrs555</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>0</td>\n      <td>0.012821</td>\n      <td>0.009856</td>\n      <td>0.006470</td>\n      <td>0.003669</td>\n      <td>0.001615</td>\n      <td>0.000176</td>\n      <td>0.071571</td>\n      <td>0.030000</td>\n      <td>NaN</td>\n      <td>...</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>1</td>\n      <td>0.010425</td>\n      <td>0.008598</td>\n      <td>0.006058</td>\n      <td>0.003653</td>\n      <td>0.001748</td>\n      <td>0.000051</td>\n      <td>0.102069</td>\n      <td>0.027000</td>\n      <td>NaN</td>\n      <td>...</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>2</td>\n      <td>0.014933</td>\n      <td>0.011885</td>\n      <td>0.007426</td>\n      <td>0.004519</td>\n      <td>0.001869</td>\n      <td>0.000392</td>\n      <td>0.051974</td>\n      <td>0.037000</td>\n      <td>NaN</td>\n      <td>...</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>3</td>\n      <td>0.014598</td>\n      <td>0.011517</td>\n      <td>0.007341</td>\n      <td>0.004205</td>\n      <td>0.002077</td>\n      <td>0.000308</td>\n      <td>0.056256</td>\n      <td>0.030000</td>\n      <td>NaN</td>\n      <td>...</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>4</td>\n      <td>0.014281</td>\n      <td>0.011432</td>\n      <td>0.006815</td>\n      <td>0.003481</td>\n      <td>0.001421</td>\n      <td>0.000126</td>\n      <td>0.045177</td>\n      <td>0.033000</td>\n      <td>NaN</td>\n      <td>...</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>...</th>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n    </tr>\n    <tr>\n      <th>2216</th>\n      <td>2216</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000782</td>\n      <td>0.001187</td>\n      <td>0.002979</td>\n      <td>0.000848</td>\n      <td>86.371340</td>\n      <td>41.652000</td>\n      <td>NaN</td>\n      <td>...</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>2217</th>\n      <td>2217</td>\n      <td>0.003842</td>\n      <td>0.003566</td>\n      <td>0.003204</td>\n      <td>0.003489</td>\n      <td>0.005542</td>\n      <td>0.002453</td>\n      <td>11.006004</td>\n      <td>90.334999</td>\n      <td>NaN</td>\n      <td>...</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>2218</th>\n      <td>2218</td>\n      <td>0.004306</td>\n      <td>0.004060</td>\n      <td>0.003854</td>\n      <td>0.004282</td>\n      <td>0.005715</td>\n      <td>0.003042</td>\n      <td>5.618242</td>\n      <td>61.255329</td>\n      <td>NaN</td>\n      <td>...</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>2219</th>\n      <td>2219</td>\n      <td>0.001798</td>\n      <td>0.002077</td>\n      <td>0.002604</td>\n      <td>0.003242</td>\n      <td>0.005303</td>\n      <td>0.003317</td>\n      <td>12.134423</td>\n      <td>138.046997</td>\n      <td>NaN</td>\n      <td>...</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>2220</th>\n      <td>2220</td>\n      <td>0.000000</td>\n      <td>0.000423</td>\n      <td>0.001642</td>\n      <td>0.002282</td>\n      <td>0.004931</td>\n      <td>0.001849</td>\n      <td>49.089612</td>\n      <td>43.099998</td>\n      <td>NaN</td>\n      <td>...</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n    </tr>\n  </tbody>\n</table>\n<p>2221 rows × 39 columns</p>\n</div>"
     },
     "metadata": {},
     "output_type": "execute_result",
     "execution_count": 3
    }
   ],
   "source": [
    "commonCols = ['rrs412','rrs443','rrs490','rrs510','rrs555','rrs670']\n",
    "\n",
    "cols412 = ['rrs412/rrs443','rrs412/rrs490','rrs412/rrs510','rrs412/rrs555','rrs412/rrs670']\n",
    "cols443 = ['rrs443/rrs412','rrs443/rrs490','rrs443/rrs510','rrs443/rrs555','rrs443/rrs670']\n",
    "cols490 = ['rrs490/rrs412','rrs490/rrs443','rrs490/rrs510','rrs490/rrs555','rrs490/rrs670']\n",
    "cols510 = ['rrs510/rrs412','rrs510/rrs443','rrs510/rrs490','rrs510/rrs555','rrs510/rrs670']\n",
    "cols555 = ['rrs555/rrs412','rrs555/rrs443','rrs555/rrs490','rrs555/rrs510','rrs555/rrs670']\n",
    "cols670 = ['rrs670/rrs412','rrs670/rrs443','rrs670/rrs490','rrs670/rrs510','rrs670/rrs555']\n",
    "\n",
    "labelCol = ['seawifs_chlor_a','in_situ_chl']\n",
    "\n",
    "cols412.extend(cols443)\n",
    "cols412.extend(cols490)\n",
    "cols412.extend(cols510)\n",
    "cols412.extend(cols555)\n",
    "cols412.extend(cols670)\n",
    "\n",
    "\n",
    "\n",
    "col_name = dt.columns.tolist()\n",
    "\n",
    "col_name.extend(cols412)\n",
    "\n",
    "print(commonCols)\n",
    "dt.reindex(columns=col_name)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "### 412 波段比"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "outputs": [],
   "source": [
    "dt['rrs412/rrs443'] = dt['rrs412']/dt['rrs443']\n",
    "dt['rrs412/rrs490'] = dt['rrs412']/dt['rrs490']\n",
    "dt['rrs412/rrs510'] = dt['rrs412']/dt['rrs510']\n",
    "dt['rrs412/rrs555'] = dt['rrs412']/dt['rrs555']\n",
    "dt['rrs412/rrs670'] = dt['rrs412']/dt['rrs670']\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "### 443 波段比"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "outputs": [],
   "source": [
    "dt['rrs443/rrs412'] = dt['rrs443']/dt['rrs412']\n",
    "dt['rrs443/rrs490'] = dt['rrs443']/dt['rrs490']\n",
    "dt['rrs443/rrs510'] = dt['rrs443']/dt['rrs510']\n",
    "dt['rrs443/rrs555'] = dt['rrs443']/dt['rrs555']\n",
    "dt['rrs443/rrs670'] = dt['rrs443']/dt['rrs670']\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "### 490 波段比"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "outputs": [],
   "source": [
    "dt['rrs490/rrs412'] = dt['rrs490']/dt['rrs412']\n",
    "dt['rrs490/rrs443'] = dt['rrs490']/dt['rrs443']\n",
    "dt['rrs490/rrs510'] = dt['rrs490']/dt['rrs510']\n",
    "dt['rrs490/rrs555'] = dt['rrs490']/dt['rrs555']\n",
    "dt['rrs490/rrs670'] = dt['rrs490']/dt['rrs670']\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "### 510 波段比"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "outputs": [],
   "source": [
    "dt['rrs510/rrs412'] = dt['rrs510']/dt['rrs412']\n",
    "dt['rrs510/rrs443'] = dt['rrs510']/dt['rrs443']\n",
    "dt['rrs510/rrs490'] = dt['rrs510']/dt['rrs490']\n",
    "dt['rrs510/rrs555'] = dt['rrs510']/dt['rrs555']\n",
    "dt['rrs510/rrs670'] = dt['rrs510']/dt['rrs670']"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "### 555 波段比"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "outputs": [],
   "source": [
    "dt['rrs555/rrs412'] = dt['rrs555']/dt['rrs412']\n",
    "dt['rrs555/rrs443'] = dt['rrs555']/dt['rrs443']\n",
    "dt['rrs555/rrs490'] = dt['rrs555']/dt['rrs490']\n",
    "dt['rrs555/rrs510'] = dt['rrs555']/dt['rrs510']\n",
    "dt['rrs555/rrs670'] = dt['rrs555']/dt['rrs670']"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "### 670 波段比"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "outputs": [],
   "source": [
    "dt['rrs670/rrs412'] = dt['rrs670']/dt['rrs412']\n",
    "dt['rrs670/rrs443'] = dt['rrs670']/dt['rrs443']\n",
    "dt['rrs670/rrs490'] = dt['rrs670']/dt['rrs490']\n",
    "dt['rrs670/rrs510'] = dt['rrs670']/dt['rrs510']\n",
    "dt['rrs670/rrs555'] = dt['rrs670']/dt['rrs555']\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "outputs": [],
   "source": [
    "commonCols.extend(cols412)\n",
    "commonCols.extend(labelCol)\n",
    "\n",
    "trainDs = dt[commonCols]\n",
    "\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "outputs": [
    {
     "data": {
      "text/plain": "<matplotlib.collections.PathCollection at 0x14b3f2faac8>"
     },
     "metadata": {},
     "output_type": "execute_result",
     "execution_count": 11
    },
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "trainDs.head(10)\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "showDs = trainDs[trainDs['seawifs_chlor_a'] < 20]\n",
    "plt.axis([0, 20, 0, 20])\n",
    "plt.scatter(showDs.seawifs_chlor_a,showDs.in_situ_chl)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "outputs": [
    {
     "name": "stderr",
     "text": [
      "D:\\Users\\ASUS\\anaconda3\\envs\\deeplab\\lib\\site-packages\\pandas\\core\\frame.py:4172: SettingWithCopyWarning: \nA value is trying to be set on a copy of a slice from a DataFrame\n\nSee the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n  method=method,\n"
     ],
     "output_type": "stream"
    }
   ],
   "source": [
    "trainDs.replace(np.inf, 0,inplace=True) \n",
    "trainDs.replace(np.nan, 0,inplace=True) \n",
    "trainDs.to_csv(r'E:\\02Projects\\papers\\chlmodel\\data\\seawifs\\03 augment\\train_dataset-aug-features.csv')"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "outputs": [
    {
     "data": {
      "text/plain": "Empty DataFrame\nColumns: [Missing Ratio]\nIndex: []",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>Missing Ratio</th>\n    </tr>\n  </thead>\n  <tbody>\n  </tbody>\n</table>\n</div>"
     },
     "metadata": {},
     "output_type": "execute_result",
     "execution_count": 13
    }
   ],
   "source": [
    "all_data_na = (trainDs.isna().sum() / len(trainDs)) * 100\n",
    "all_data_na = all_data_na.drop(all_data_na[all_data_na == 0].index).sort_values(ascending=False)[:30]\n",
    "missing_data = pd.DataFrame({'Missing Ratio' :all_data_na})\n",
    "missing_data.head(20)\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "outputs": [
    {
     "data": {
      "text/plain": "rrs412             0\nrrs443             0\nrrs490             0\nrrs510             0\nrrs555             0\nrrs670             0\nrrs412/rrs443      0\nrrs412/rrs490      0\nrrs412/rrs510      0\nrrs412/rrs555      0\nrrs412/rrs670      0\nrrs443/rrs412      0\nrrs443/rrs490      0\nrrs443/rrs510      0\nrrs443/rrs555      0\nrrs443/rrs670      0\nrrs490/rrs412      0\nrrs490/rrs443      0\nrrs490/rrs510      0\nrrs490/rrs555      0\nrrs490/rrs670      0\nrrs510/rrs412      0\nrrs510/rrs443      0\nrrs510/rrs490      0\nrrs510/rrs555      0\nrrs510/rrs670      0\nrrs555/rrs412      0\nrrs555/rrs443      0\nrrs555/rrs490      0\nrrs555/rrs510      0\nrrs555/rrs670      0\nrrs670/rrs412      0\nrrs670/rrs443      0\nrrs670/rrs490      0\nrrs670/rrs510      0\nrrs670/rrs555      0\nseawifs_chlor_a    0\nin_situ_chl        0\ndtype: int64"
     },
     "metadata": {},
     "output_type": "execute_result",
     "execution_count": 14
    }
   ],
   "source": [
    "trainDs[trainDs < 0].count()\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "outputs": [],
   "source": [],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "outputs": [],
   "source": [
    "\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  },
  "pycharm": {
   "stem_cell": {
    "cell_type": "raw",
    "source": [],
    "metadata": {
     "collapsed": false
    }
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}